Merhabalar Murat Bey. İndirilen APK dosyasının temp klasörüne inmesi, Android cihazlarda standart bir davranıştır. Bu dosyanın doğrudan indirilen konumuna kaydedilmesi yerine, temp klasörüne kaydedilmesinin nedeni, indirme işlemi sırasında cihazda oluşabilecek kesintiler veya hatalar nedeniyle dosyanın bütünlüğünü korumaktır. Bu nedenle, Android'de bir indirme yöneticisi kullanarak indirilen bir dosyayı doğrudan hedef konuma taşımak mümkün değildir
Bununla birlikte, dosyayı hedef konuma taşıyabileceğiniz birkaç seçenek var:
- DownloadManager ile indirme işlemi tamamlandıktan sonra, dosyanın kaydedildiği temp klasöründen alınarak hedef konuma taşınabilir. Bu işlemi aşağıdaki örnek kodla gerçekleştirebilirsiniz:
public void onDownloadComplete(Uri uri) {
String fileName = getFileName(uri);
File tempFile = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), fileName);
File destFile = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "myapp.apk");
boolean success = tempFile.renameTo(destFile);
if (success) {
} else {
}
}
private String getFileName(Uri uri) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
int nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
cursor.moveToFirst();
String name = cursor.getString(nameIndex);
cursor.close();
return name;
}
- Dosyayı taşımadan önce, kullanıcıya dosyanın kaydedileceği konumu seçme seçeneği sunabilirsiniz. Bu, dosyanın kaydedileceği konumu önceden belirlemek isteyen kullanıcılar için kullanışlı bir seçenektir. Aşağıdaki örnek kod, kullanıcıya bir dosya tarayıcısı açarak dosya konumunu seçme seçeneği sunar:
public void onDownloadComplete(Uri uri) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST_CODE_OPEN_DIRECTORY);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (requestCode == REQUEST_CODE_OPEN_DIRECTORY && resultCode == Activity.RESULT_OK) {
Uri treeUri = resultData.getData();
DocumentFile tree = DocumentFile.fromTreeUri(this, treeUri);
String fileName = getFileName(uri);
DocumentFile file = tree.createFile("application/vnd.android.package-archive", fileName);
try (InputStream in = getContentResolver().openInputStream(uri)) {
try (OutputStream out = getContentResolver().openOutputStream(file.getUri())) {
byte[] buffer = new byte[8192];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
}
} catch (IOException e) {
// Dosya taşınamadı
}
}
}
private String getFileName(Uri uri)